正則表達式(Regular Expressions, 簡稱 regex)是一種用來處理文字的強大工具。它可以幫我們輕鬆找出符合特定模式的字串,這在 AI 的資料處理、自然語言處理(NLP)等領域非常有用。
以日常生活中常見的應用來說,我們可以使用正則表達式來過濾或提取有用的資訊,比如電子郵件、電話號碼、日期格式等。
. : 任意一個字元(除了換行符號)\d : 任意一個數字(0-9)\w : 任意一個字母、數字或底線+ : 重複出現 1 次以上* : 重複出現 0 次以上? : 出現 0 次或 1 次[] : 字元集合,匹配其中任意一個字元^ : 字串開頭$ : 字串結尾| : 「或」的意思,表示兩種選擇之一() : 群組,通常用來標示我們想要擷取的部分在 AI 領域中,常常需要處理大量的文本資料。透過正則表達式,我們可以更快速地整理、提取資訊。例如:
利用正則表達式來找出輸入中的電子郵件地址,這樣的寫法很適合用在分析社交媒體數據或自動分類郵件中。

find_email 是一個函數,用來從輸入的 text 字串中提取出所有符合條件的電子郵件地址。
r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b' 是我們用來找電子郵件的正則表達式:
\b是單詞邊界,確保我們只匹配整個電子郵件,不是字串的一部分。[A-Za-z0-9._%+-]+匹配電子郵件的用戶名部分,允許字母、數字、點、底線等字符。@是電子郵件中的分隔符。[A-Za-z0-9.-]+匹配郵件的域名部分。\.[A-Z|a-z]{2,}匹配結尾的「.com」、「.org」等後綴,後面至少有兩個字母。
re.findall():這個方法會返回所有符合條件的電子郵件地址。
測試中輸入了一個包含兩個電子郵件地址的範例字串,並通過 find_email() 函數找出其中的電子郵件,最後將結果輸出。

接著來試試看提取文本中的日期,這在日誌分析、文件處理等任務中很有用。

\b\d{4}[-/]\d{2}[-/]\d{2}\b|\b\d{2}[-/]\d{2}[-/]\d{4}\b' 來匹配不同的日期格式:
\d{4}:表示 4 位數字(年份)[-/]:表示日期中的分隔符,允許-或/\d{2}:表示月份和日期- 用
|:來處理兩種常見的日期格式(例如 YYYY-MM-DD 或 DD/MM/YYYY)

社交媒體的平台上,有時會出現不當的留言。這時可以透過 Python 的正則表達式,自動過濾掉這些不雅字眼,來維持乾淨的留言區。
建立一個簡單的留言過濾器,當用戶輸入留言時,若有不雅字眼,系統會自動將它們替換成「***」。以下是題目的要求:

定義不雅字清單:首先我們建立一個不雅字的清單 bad_words = ['stupid', 'idiot', 'dumb'],這些字詞會被過濾器偵測到並替換。
建立正則表達式:
使用 r'|'.join(bad_words) 將這些字詞轉換成一個正則表達式字串,| 是「或」的意思,可以同時檢測多個不雅字。
正則表達式替換:re.sub() 函數用來匹配並替換不雅字,這裡使用了 flags=re.IGNORECASE 來忽略大小寫,確保同個詞(如「Stupid」和「stupid」)都能被偵測。
提醒留言已過濾:
如果 filtered_message 和原始 message 不相同,代表系統已經過濾了不雅字眼,並給出提示。
檢查替換結果:

一開始覺得正則表達式中那些符號有點複雜,像是 \d, \w, 還有 +、* 之類的符號,感覺有點難懂。但當我開始用它來解決問題時,突然發現這些符號其實比很多行的程式碼還要簡潔許多(但感覺可讀性沒有很高QQ),能很快匹配到我們想要的資料。無論是找出某種格式的文字,還是從大段文本中挑出特定的東西,正則表達式都很方便。
而這次小專題的主題也是我們生活中很常見的情境,所以我不僅學到了如何使用正則表達式來過濾敏感內容,未來還能實際應用在網站或社交平台的留言過濾系統中。
以後如果遇到資料過濾、清理,甚至 AI 訓練的前期處理,我想正則表達式都會是必不可少的工具><